"""
数据处理计算
==============================================================================================
map方法
PySpark的数据计算，都是基于RDD对象来进行的,自然是依赖，RDD对象内置丰富的：成员方法（算子）

==============================================================================================
map算子

map算子，将 RDD 中的数据一条条处理（处理的逻辑，基于 map 算子中接收的处理函数），返回新的 RDD

==============================================================================================
语法
rdd.map(func)

==============================================================================================
1. map算子（成员方法）
- 接受一个处理函数，可用lambda表达式快速编写
- 对RDD内的元素逐个处理，并返回一个新的RDD
2. 链式调用
- 对于返回值是新RDD的算子，可以通过链式调用的方式多次调用算子。

"""

# 演示RDD的map成员方法的使用
from pyspark import SparkConf, SparkContext
# windows 中 spark 找不到对于的 python 解释器会报错
import os

os.environ["PYSPARK_PYTHON"] = "D:/python3.11/python.exe"

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

# 准备一个RDD
rdd = sc.parallelize([1, 2, 3, 4, 5])


# 通过map方法将全部数据乘以10
def func(data):
    return data * 10


rdd2 = rdd.map(func)

# print(rdd2.collect())
# (T) -> U
# (T) -> T

# 链式调用
rdd3 = rdd.map(lambda x: x * 10).map(lambda x: x + 5)
print(rdd3.collect())
